#!/bin/bash

# Linux 系统数据清理脚本
# 用于释放磁盘空间，解决存储不足问题

echo "=== Linux 数据清理脚本 ==="
echo "开始清理系统数据以释放磁盘空间..."
echo ""

# 1. 清理APT缓存
echo "1. 清理APT包管理器缓存..."
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y
echo "APT缓存清理完成"
echo ""

# 2. 清理系统日志
echo "2. 清理系统日志文件..."
sudo journalctl --vacuum-time=7d
sudo find /var/log -name "*.log" -type f -mtime +30 -delete
sudo find /var/log -name "*.gz" -type f -delete
echo "系统日志清理完成"
echo ""

# 3. 清理临时文件
echo "3. 清理临时文件..."
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
echo "临时文件清理完成"
echo ""

# 4. 清理用户缓存
echo "4. 清理用户缓存文件..."
rm -rf ~/.cache/*
rm -rf ~/.thumbnails/*
echo "用户缓存清理完成"
echo ""

# 5. 清理Docker相关数据（如果安装了Docker）
if command -v docker &> /dev/null; then
    echo "5. 清理Docker数据..."
    sudo docker system prune -af
    sudo docker volume prune -f
    sudo docker image prune -af
    echo "Docker数据清理完成"
else
    echo "5. 未检测到Docker，跳过Docker清理"
fi
echo ""

# 6. 清理旧内核文件
echo "6. 清理旧内核文件..."
sudo apt-get autoremove --purge -y
echo "旧内核文件清理完成"
echo ""

# 7. 清理Snap包缓存（如果使用Snap）
if command -v snap &> /dev/null; then
    echo "7. 清理Snap包缓存..."
    sudo snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do
        sudo snap remove "$snapname" --revision="$revision"
    done
    echo "Snap包缓存清理完成"
else
    echo "7. 未检测到Snap，跳过Snap清理"
fi
echo ""

# 8. 清理大文件和重复文件（可选）
echo "8. 查找大文件（>100MB）..."
echo "以下是系统中的大文件："
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | head -20
echo ""
echo "如需删除特定大文件，请手动执行: sudo rm /path/to/large/file"
echo ""

# 9. 显示磁盘使用情况
echo "9. 当前磁盘使用情况："
df -h
echo ""

# 10. 显示目录大小排序
echo "10. 根目录下各目录大小排序："
sudo du -sh /* 2>/dev/null | sort -hr | head -10
echo ""

echo "=== 清理完成 ==="
echo "建议重启系统以确保所有更改生效：sudo reboot"
echo ""
echo "如果空间仍然不足，请检查以下目录："
echo "- /var/log (日志文件)"
echo "- /tmp (临时文件)"
echo "- /home (用户文件)"
echo "- /var/lib/docker (Docker数据)"
echo "- /var/cache (系统缓存)"